package Offer;

import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;

/**
 * 最小的k个数
 * @author 是阿秋啊
 * @date 2022/04/15 19:12
 **/
public class Num40 {
    public int[] getLeastNumbers(int[] arr, int k) {
        if(k == 0 || arr.length == 0) {
            return new int[0];
        }
        // 方法一：调用排序
//        Arrays.sort(arr);
//        int[] ret = new int[k];
//        for (int i = 0;i < k;i++) {
//            ret[i] = arr[i];
//        }
//        return ret;
        // 最大堆
        Queue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        for (int j : arr) {
            if (queue.size() < k) {
                queue.offer(j);
            }else {
                int max = queue.peek();
                if (j < max) {
                    queue.poll();
                    queue.offer(j);
                }
            }
        }
        int[] ret = new int[k];
        for (int i = 0; i < k; i++) {
            if (!queue.isEmpty()) {
                ret[i] = queue.poll();
            }
        }
        return ret;
    }
}
